package cn.cdeden.common.oss.enumd;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * @ProjectName : ecm_hou
 * @Package : com.cdyd.ecm.utils.enums
 * @ClassName : StorageFolderTypeEnum
 * @Author : Yu.
 * @Description : // 唯一的公共桶
 * @Version : 1.0
 */
@Getter
@AllArgsConstructor
public enum OssBucketOneEnum {

    TEMPORARY_FILES("temporary-files","临时文件桶",false,OssModuleType.Temporary), // 临时文件

    PUBLIC_IMAGES("public-images","公开图片文件桶",true,OssModuleType.public_images), // 公开图片文件

    ENTERPRISE_BUCKET("enterprise","企业文件桶",true,OssModuleType.Enterprise), // 企业文件桶

    TEAM_BUCKET("team","团队文件桶",true,OssModuleType.Team), // 团队文件桶

    FORM_DOC_FILES("form-doc-files","表单文档文件桶",true,OssModuleType.From_doc),

    TEMPLATE_BUCKET("template", "文件模版桶", true, OssModuleType.Template), //文件模版桶

    ENTERPRISE_TEMPLATE("enterprise-template","企业文件桶",true,OssModuleType.Enterprise), // 企业文件桶

    QA("qa-file", "AI问答附件桶", true, OssModuleType.Qa), // AI问答附件桶

    Material("material-file", "资源文件桶", true, OssModuleType.Material), // 资源模块
    ;

    /**
     * Request 类型
     */
    private final String code;
    /**
     * 中午注释
     */
    private final String name;

    //系统 是否公开
    private final boolean status;

    private final OssModuleType type;


    private static final Map<String, OssBucketOneEnum> BY_CODE = new HashMap<>();

    static {
        for (OssBucketOneEnum value : OssBucketOneEnum.values()) {
            BY_CODE.put(value.getCode(), value);
        }
    }

    /**
     * 查找与给定类型匹配的枚举状态
     * @author Yu.
     * @Date 2024/12/6 16:11
     * 。
     * @param code 要查找的类型字符串
     * @return 如果找到匹配项，则返回枚举；否则返回 null。
     * @return cn.cdeden.common.oss.enumd.OssBucketOneEnum
     **/
    public static OssBucketOneEnum findInfo(String code) {
        if (StringUtils.isBlank(code) || !BY_CODE.containsKey(code)) {
            return null;
        }
        return BY_CODE.get(code);
    }


    /**
     * 查找与给定类型匹配的枚举状态。
     * @param type 要查找的类型字符串
     * @return 如果找到匹配项，则返回枚举的状态；否则返回false。
     */
    public static boolean findStatus(String type) {
        if (StringUtils.isBlank(type) || !BY_CODE.containsKey(type)) {
            return false;
        }
        return BY_CODE.get(type).isStatus();
    }

}
